<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Key操作  &middot; sitename</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">


<meta name="description" content="Key操作 description" />

<meta name="keywords" content="one, two, ">


<meta property="og:title" content="Key操作  &middot; sitename ">
<meta property="og:site_name" content="sitename"/>
<meta property="og:url" content="https://lvzongcheng.gitee.io/redis/key%E6%93%8D%E4%BD%9C/" />
<meta property="og:locale" content="en-EN">


<meta property="og:type" content="article" />
<meta property="og:description" content="Key操作 description"/>
<meta property="og:article:published_time" content="2017-05-13T00:00:00Z" />
<meta property="og:article:modified_time" content="2017-05-13T00:00:00Z" />

  
    
<meta property="og:article:tag" content="one">
    
<meta property="og:article:tag" content="two">
    
  

  

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "headline": "Key操作",
    "author": {
      "@type": "Person",
      "name": "LvZongCheng"
    },
    "datePublished": "2017-05-13",
    "description": "Key操作 description",
    "wordCount":  371 
  }
</script>



<link rel="canonical" href="https://lvzongcheng.gitee.io/redis/key%E6%93%8D%E4%BD%9C/" />

<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://lvzongcheng.gitee.io/touch-icon-144-precomposed.png">
<link href="https://lvzongcheng.gitee.io/favicon.png" rel="icon">

<meta name="generator" content="Hugo 0.60.0" />

  <!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

<link href='https://fonts.googleapis.com/css?family=Merriweather:300%7CRaleway%7COpen+Sans' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/highlight/default.css">

  
  
	<script>
	  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

	  ga('create', 'Your Google Analytics tracking code', 'auto');
	  ga('send', 'pageview');

	</script>

</head>
<body>
  <main id="main-wrapper" class="container main_wrapper has-sidebar">
    <header id="main-header" class="container main_header">
  <div class="container brand">
  <div class="container title h1-like">
  <a class="baselink" href="https://lvzongcheng.gitee.io">
  LvZongCheng

</a>

</div>

  
<div class="container topline">
  
  淡定 执著 进取 自律


</div>


</div>

  <nav class="container nav primary no-print">
  

<a class="homelink" href="https://lvzongcheng.gitee.io">home</a>


  
<a href="https://lvzongcheng.gitee.io/framework" title="Show list of Frameworks">Frameworks</a>

<a href="https://lvzongcheng.gitee.io/java" title="Show list of Java">Java</a>

<a href="https://lvzongcheng.gitee.io/linux" title="Show list of Linux">Linux</a>

<a href="https://lvzongcheng.gitee.io/redis" title="Show list of Redis">Redis</a>

<a href="https://lvzongcheng.gitee.io/sql" title="Show list of SQL">SQL</a>

<a href="https://lvzongcheng.gitee.io/Spring" title="Show list of Spring">Spring</a>

<a href="https://lvzongcheng.gitee.io/tools" title="Show list of Tools">Tools</a>

<a href="https://lvzongcheng.gitee.io/webpage" title="Show list of WebPage">WebPage</a>

<a href="https://lvzongcheng.gitee.io/information" title="Show list of information">information</a>

<a href="https://lvzongcheng.gitee.io/network" title="Show list of network">network</a>

<a href="https://lvzongcheng.gitee.io/%E5%BE%AE%E6%9C%8D%E5%8A%A1" title="Show list of 微服务">微服务</a>

<a href="https://lvzongcheng.gitee.io/%E6%80%BB%E7%BB%93" title="Show list of 总结">总结</a>

<a href="https://lvzongcheng.gitee.io/%E6%9C%BA%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96" title="Show list of 机器自动化">机器自动化</a>

<a href="https://lvzongcheng.gitee.io/%E6%B1%87%E7%BC%96" title="Show list of 汇编">汇编</a>

<a href="https://lvzongcheng.gitee.io/%E8%AE%B0%E4%BA%8B%E6%9C%AC" title="Show list of 记事本">记事本</a>


</nav>

<div class="container nav secondary no-print">
  
<a id="contact-link-email" class="contact_link" rel="me" aria-label="Email" href="mailto:Lyc19880405@163.com">
  <span class="fa fa-envelope-square"></span></a>



<a id="contact-link-github" class="contact_link" rel="me" aria-label="Github" href="https://github.com/enten/hugo-boilerplate">
  <span class="fa fa-github-square"></span></a>




 


















</div>


  

</header>


<article id="main-content" class="container main_content single">
  <header class="container hat">
  <h1>Key操作
</h1>

</header>

  <div class="container content">
  <p>一、概述：针对key的通用操作</p>
<p>二、相关命令列表：</p>
<p>命令原型	时间复杂度	命令描述	返回值
KEYS pattern	 获取所有匹配pattern参数的Keys。需要说明的是，在我们的正常操作中应该尽量避免对该命令的调用，因为对于大型数据库而言，该命令是非常耗时的，对Redis服务器的性能打击也是比较大的。pattern支持glob-style的通配符格式，如*表示任意一个或多个字符，?表示任意字符，[abc]表示方括号中任意一个字母。	匹配模式的键列表。
DEL key [key &hellip;]	 从数据库删除中参数中指定的keys，如果指定键不存在，则直接忽略。还需要另行指出的是，如果指定的Key关联的数据类型不是String类型，而是List、Set、Hashes和Sorted Set等容器类型，该命令删除每个键的时间复杂度为O(M)，其中M表示容器中元素的数量。而对于String类型的Key，其时间复杂度为O(1)。	实际被删除的Key数量。
EXISTS key 	 判断指定键是否存在。	1表示存在，0表示不存在。
MOVE key db 	 将当前数据库中指定的键Key移动到参数中指定的数据库中。如果该Key在目标数据库中已经存在，或者在当前数据库中并不存在，该命令将不做任何操作并返回0。  	移动成功返回1，否则0。
RENAME key newkey 	 为指定指定的键重新命名，如果参数中的两个Keys的名字相同，或者是源Key不存在，该命令都会返回相关的错误信息。如果newKey已经存在，则直接覆盖。 	 
RENAMENX key newkey	 如果新值不存在，则将参数中的原值修改为新值。其它条件和RENAME一致。	1表示修改成功，否则0。
PERSIST key	 如果Key存在过期时间，该命令会将其过期时间消除，使该Key不再有超时，而是可以持久化存储。	1表示Key的过期时间被移出，0表示该Key不存在或没有过期时间。
EXPIRE key seconds 	 该命令为参数中指定的Key设定超时的秒数，在超过该时间后，Key被自动的删除。如果该Key在超时之前被修改，与该键关联的超时将被移除。 	1表示超时被设置，0则表示Key不存在，或不能被设置。
EXPIREAT key timestamp  该命令的逻辑功能和EXPIRE完全相同，唯一的差别是该命令指定的超时时间是绝对时间，而不是相对时间。该时间参数是Unix timestamp格式的，即从1970年1月1日开始所流经的秒数。	1表示超时被设置，0则表示Key不存在，或不能被设置。 
TTL key 	 获取该键所剩的超时描述。 	返回所剩描述，如果该键不存在或没有超时设置，则返回-1。
RANDOMKEY	 从当前打开的数据库中随机的返回一个Key。	返回的随机键，如果该数据库是空的则返回nil。
TYPE key 	 获取与参数中指定键关联值的类型，该命令将以字符串的格式返回。	返回的字符串为string、list、set、hash和zset，如果key不存在返回none。</p>
<p>三、命令示例：</p>
<ol>
<li>
<p>KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
#在Shell命令行下启动Redis客户端工具。
/&gt; redis-cli
#清空当前选择的数据库，以便于对后面示例的理解。
redis 127.0.0.1:6379&gt; flushdb
OK
#添加String类型的模拟数据。
redis 127.0.0.1:6379&gt; set mykey 2
OK
redis 127.0.0.1:6379&gt; set mykey2 &ldquo;hello&rdquo;
OK
#添加Set类型的模拟数据。
redis 127.0.0.1:6379&gt; sadd mysetkey 1 2 3
(integer) 3
#添加Hash类型的模拟数据。
redis 127.0.0.1:6379&gt; hset mmtest username &ldquo;stephen&rdquo;
(integer) 1
#根据参数中的模式，获取当前数据库中符合该模式的所有key，从输出可以看出，该命令在执行时并不区分与Key关联的Value类型。
redis 127.0.0.1:6379&gt; keys my*
1) &ldquo;mysetkey&rdquo;
2) &ldquo;mykey&rdquo;
3) &ldquo;mykey2&rdquo;
#删除了两个Keys。
redis 127.0.0.1:6379&gt; del mykey mykey2
(integer) 2
#查看一下刚刚删除的Key是否还存在，从返回结果看，mykey确实已经删除了。
redis 127.0.0.1:6379&gt; exists mykey
(integer) 0
#查看一下没有删除的Key，以和上面的命令结果进行比较。
redis 127.0.0.1:6379&gt; exists mysetkey
(integer) 1
#将当前数据库中的mysetkey键移入到ID为1的数据库中，从结果可以看出已经移动成功。
redis 127.0.0.1:6379&gt; move mysetkey 1
(integer) 1
#打开ID为1的数据库。
redis 127.0.0.1:6379&gt; select 1
OK
#查看一下刚刚移动过来的Key是否存在，从返回结果看已经存在了。
redis 127.0.0.1:6379[1]&gt; exists mysetkey
(integer) 1
#在重新打开ID为0的缺省数据库。
redis 127.0.0.1:6379[1]&gt; select 0
OK
#查看一下刚刚移走的Key是否已经不存在，从返回结果看已经移走。
redis 127.0.0.1:6379&gt; exists mysetkey
(integer) 0
#准备新的测试数据。 <br>
redis 127.0.0.1:6379&gt; set mykey &ldquo;hello&rdquo;
OK
#将mykey改名为mykey1
redis 127.0.0.1:6379&gt; rename mykey mykey1
OK
#由于mykey已经被重新命名，再次获取将返回nil。
redis 127.0.0.1:6379&gt; get mykey
(nil)
#通过新的键名获取。
redis 127.0.0.1:6379&gt; get mykey1
&ldquo;hello&rdquo;
#由于mykey已经不存在了，所以返回错误信息。
redis 127.0.0.1:6379&gt; rename mykey mykey1
(error) ERR no such key
#为renamenx准备测试key
redis 127.0.0.1:6379&gt; set oldkey &ldquo;hello&rdquo;
OK
redis 127.0.0.1:6379&gt; set newkey &ldquo;world&rdquo;
OK
#由于newkey已经存在，因此该命令未能成功执行。
redis 127.0.0.1:6379&gt; renamenx oldkey newkey
(integer) 0
#查看newkey的值，发现它也没有被renamenx覆盖。
redis 127.0.0.1:6379&gt; get newkey
&ldquo;world&rdquo;</p>
</li>
<li>
<p>PERSIST/EXPIRE/EXPIREAT/TTL: <br>
#为后面的示例准备的测试数据。
redis 127.0.0.1:6379&gt; set mykey &ldquo;hello&rdquo;
OK
#将该键的超时设置为100秒。
redis 127.0.0.1:6379&gt; expire mykey 100
(integer) 1
#通过ttl命令查看一下还剩下多少秒。
redis 127.0.0.1:6379&gt; ttl mykey
(integer) 97
#立刻执行persist命令，该存在超时的键变成持久化的键，即将该Key的超时去掉。
redis 127.0.0.1:6379&gt; persist mykey
(integer) 1
#ttl的返回值告诉我们，该键已经没有超时了。
redis 127.0.0.1:6379&gt; ttl mykey
(integer) -1
#为后面的expire命令准备数据。
redis 127.0.0.1:6379&gt; del mykey
(integer) 1
redis 127.0.0.1:6379&gt; set mykey &ldquo;hello&rdquo;
OK
#设置该键的超时被100秒。
redis 127.0.0.1:6379&gt; expire mykey 100
(integer) 1
#用ttl命令看一下当前还剩下多少秒，从结果中可以看出还剩下96秒。
redis 127.0.0.1:6379&gt; ttl mykey
(integer) 96
#重新更新该键的超时时间为20秒，从返回值可以看出该命令执行成功。
redis 127.0.0.1:6379&gt; expire mykey 20
(integer) 1
#再用ttl确认一下，从结果中可以看出果然被更新了。
redis 127.0.0.1:6379&gt; ttl mykey
(integer) 17
#立刻更新该键的值，以使其超时无效。
redis 127.0.0.1:6379&gt; set mykey &ldquo;world&rdquo;
OK
#从ttl的结果可以看出，在上一条修改该键的命令执行后，该键的超时也无效了。
redis 127.0.0.1:6379&gt; ttl mykey
(integer) -1</p>
</li>
<li>
<p>TYPE/RANDOMKEY/SORT:
#由于mm键在数据库中不存在，因此该命令返回none。
redis 127.0.0.1:6379&gt; type mm
none
#mykey的值是字符串类型，因此返回string。
redis 127.0.0.1:6379&gt; type mykey
string
#准备一个值是set类型的键。
redis 127.0.0.1:6379&gt; sadd mysetkey 1 2
(integer) 2
#mysetkey的键是set，因此返回字符串set。
redis 127.0.0.1:6379&gt; type mysetkey
set
#返回数据库中的任意键。
redis 127.0.0.1:6379&gt; randomkey
&ldquo;oldkey&rdquo;
#清空当前打开的数据库。
redis 127.0.0.1:6379&gt; flushdb
OK
#由于没有数据了，因此返回nil。
redis 127.0.0.1:6379&gt; randomkey
(nil)</p>
</li>
</ol>

</div>


  
</article>
      <footer id="main-footer" class="container main_footer">
  

  <div class="container nav foot no-print">
  
<a href="https://lvzongcheng.gitee.io/license">license</a>


  <a class="toplink" href="#">back to top</a>

</div>

  <div class="container credits">
  
<div class="container footline">
  
  code with <!-- raw HTML omitted --><!-- raw HTML omitted -->


</div>


  
<div class="container copyright">
  
  (c) 2015 yourname.


</div>


</div>

</footer>

    </main>
    
<script type="text/javascript">
  (function() {
    
    
    if (window.location.hostname == "localhost")
      return;
    var dsq = document.createElement('script'); dsq.async = true; dsq.type = 'text/javascript';
    dsq.src = '//your_disqus_shortname.disqus.com/count.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>



<script src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



    
  </body>
</html>

